import serial #导入模块
import time
import threading
import socket

dataUdpUsart = '1234'
dataUsartUdp = '4567'

HOST = '172.16.20.126'#本机IP地址
PORT = 6000
BUFSIZ = 1024
ADDRESS = (HOST, PORT)

addr = ('172.16.20.217', 6001)#电脑IP地址

#端口，GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
portx="/dev/ttyAMA0"
#波特率，标准值之一：50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
bps=115200
#超时设置,None：永远等待操作，0为立即返回请求结果，其他值为等待超时时间(单位为秒）
timex=0.5

class myThread (threading.Thread):
    def __init__(self, threadID, name, function):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.function = function
    def run(self):
        while True:
            if self.function == 1:
                UDP_to_Usart(dataUdpUsart,addr)
            elif self.function == 2:
                Usart_to_UDP(dataUsartUdp,addr)
            else:
                pass

def Usart_to_UDP(dataUsartUdp,addr):
    """
    Usart输入 UDP输出
    """
    dataUsartUdp=ser.readline()#来自串口的数据
    #————————————————————————数据处理——————————————————————#


    #—————————————————————————————————————————————————————#
    server.sendto(dataUsartUdp, addr)#处理后的数据发往网口
    print("————来自串口————",dataUsartUdp,type(dataUsartUdp))


def UDP_to_Usart(dataUdpUsart,addr):
    """
    UDP输入 Usart输出 
    """
    # 接收数据报
    dataUdpUsart, addr = server.recvfrom(1024)#来自网口的数据
    #————————————————————————数据处理——————————————————————#


    #—————————————————————————————————————————————————————#
    ser.write(dataUdpUsart)#处理后的数据发往串口
    print('来自[%s:%s]的消息: %s' % (addr[0], addr[1], dataUdpUsart))

try:
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 基于网络的数据报协议 UDP
server.bind(ADDRESS)      # 绑定客户端口和地址

# 打开串口，并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)

# 创建新线程
thread1 = myThread(1, "Usart_to_UDP", 1)
thread2 = myThread(2, "UDP_to_Usart", 2)

# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()

print("————进入循环————")
while True:
    time.sleep(1)
    


except Exception as e:
    print("---异常---：",e)


    